Over the past several decades, voicemail has expanded and established itself as a key element in the successful operations of most businesses. The typical voicemail system is composed of elements that must communicate with each other and thus, must be co-located. This can be a great disadvantage for companies that have geographically dispersed offices. Establishing a separate system at each office can be a costly endeavor as duplicative hardware is purchased and maintained at each site. Furthermore, the logistics for inter-office voicemail access can be complex. Thus, there are advantages to implementing a distributed voicemail system that allows various elements of the distributed voicemail system to be geographically distributed and shared while operating as a seamlessly integrated system. With a distributed architecture however, new challenges arise. Since elements within the voicemail system are no longer co-located, provisioning and maintenance of equipment become a challenge as elements may be, and frequently are, separated by long distances.
Voice messages may be lost if calls coming from a telephone network such as a public switched telephone network (PSTN) or cellular network, among others, are not properly processed due to unknown equipment failure. Today, a typical voicemail system includes a server that terminates communication links such as multiple T1 links from a telephone network. The server is normally in two-way communication with the telephone network, and the server is normally configured to provide an alert when one of the communication links with the telephone network fails such that communications can be rerouted through other operable communication links. However, if the server itself malfunctions, then there is no alert to re-route incoming calls. Thus, there is a need in the art for detecting equipment failure and rerouting calls coming from telephone networks before the calls reach the distributed voicemail system. Furthermore, voicemail systems must be easily scalable in order to meet dynamic capacity requirements while not resulting in down time for provisioning. Therefore, there is also a need for inserting new elements into the system on the fly.